當(dāng)我查看 SQL Server 時(shí),我檢查的第一件事是,“相對(duì)于我們?cè)诖颂幫泄艿臄?shù)據(jù)量,這個(gè)東西有多少內(nèi)存?”?長(zhǎng)期以來(lái),我一直在使用一些臨時(shí)數(shù)字,但借助選擇公共數(shù)據(jù)共享的SQL ConstantCare?用戶的數(shù)據(jù),讓我們進(jìn)行更深入的分析。
我上周四收集了大約 1,400 臺(tái)服務(wù)器的數(shù)據(jù),然后排除了堆疊實(shí)例(安裝在同一操作系統(tǒng)上的多個(gè)實(shí)例)、Azure SQL DB、托管實(shí)例和數(shù)據(jù)少于 10GB 的服務(wù)器。
SQL Server 有多少內(nèi)存?
中值 SQL Server 有 19% 的數(shù)據(jù)大小作為 RAM。意思是,如果它托管 100GB 的數(shù)據(jù),它在服務(wù)器中有 19GB 的 RAM。(最大內(nèi)存大小和文件大小是另一篇博文的討論。)
從該中位數(shù)中舉幾個(gè)例子:
- 84GB 數(shù)據(jù)托管在具有 16GB RAM 的 SQL Server 上
- 32GB RAM 托管 166GB 數(shù)據(jù)
- 55GB RAM 托管 289GB 數(shù)據(jù)
不過(guò),讓我們以不同的方式對(duì)其進(jìn)行切片:讓我們從這個(gè)樣本中取出中值數(shù)據(jù)量,即 219GB。(如果我按服務(wù)器托管的數(shù)據(jù)量對(duì)服務(wù)器進(jìn)行排序,則中間值為 219GB。)在該范圍內(nèi)的服務(wù)器中,一些包括:
- 219GB 數(shù)據(jù)托管在具有 15GB RAM 的 SQL Server 上(操作系統(tǒng)有 7% 的數(shù)據(jù)大小)
- 128GB RAM 托管 222GB 數(shù)據(jù) (58%)
- 24GB RAM 托管 222GB 數(shù)據(jù) (11%)
這些數(shù)字發(fā)人深省,但在您提出問(wèn)題之前,請(qǐng)先考慮這一點(diǎn):數(shù)據(jù)大小與硬件大小本身并不意味著用戶?滿意。還有很多其他因素在起作用,例如查詢量、調(diào)整完成、等待統(tǒng)計(jì)信息等。
來(lái)自內(nèi)存與數(shù)據(jù)大小配置極端的一些示例:
- 4.2TB 數(shù)據(jù)托管在 16GB RAM 上(哈哈哈)
- 20TB 托管在 64GB 上
- 10GB(不是 TB)托管在 64GB RAM 上
- 61GB 托管在 256GB RAM 上
隨著數(shù)據(jù)大小的增長(zhǎng),內(nèi)存不會(huì)。
我根據(jù)服務(wù)器托管的數(shù)據(jù)大小將服務(wù)器分成四分位數(shù):
- 托管 10-59GB 數(shù)據(jù)的服務(wù)器:平均 RAM 大小是數(shù)據(jù)的 74%!(例如:27GB 數(shù)據(jù),20GB RAM)
- 60-224GB 數(shù)據(jù):23% RAM 大小(例如:210GB 數(shù)據(jù),48GB RAM)
- 225-600GB 數(shù)據(jù):13% RAM 大小(例如:488GB 數(shù)據(jù),64GB RAM)
- >600GB 數(shù)據(jù):6% RAM 大小(例如:2.1TB 數(shù)據(jù),128GB RAM)
低端百分比有點(diǎn)傾斜,因?yàn)樵?10-59GB 層中,操作系統(tǒng)內(nèi)存意義重大。在我們的 SQL Server 安裝指南中,我們告訴人們至少為操作系統(tǒng)留出 4GB,我認(rèn)為大多數(shù)系統(tǒng)管理員會(huì)認(rèn)為 2GB 是最低限度。但是,隨著數(shù)據(jù)的增長(zhǎng),百分比下降——這是相當(dāng)陡峭的。
企業(yè)版服務(wù)器是否有更多內(nèi)存?
總體而言,企業(yè)版服務(wù)器處理大量數(shù)據(jù),并且配置了更多內(nèi)存來(lái)處理這些數(shù)據(jù):
- 標(biāo)準(zhǔn)版中位數(shù)據(jù)大小為 168GB,中位 RAM 大小為 32GB
- 企業(yè)版:中位數(shù)據(jù)大小為 358GB,中位 RAM 大小為 54GB
- 開(kāi)發(fā)者版:數(shù)據(jù) 111GB,RAM 16GB(可憐的開(kāi)發(fā)者)
所以就純粹的服務(wù)器大小而言,是的,企業(yè)服務(wù)器更大,但作為數(shù)據(jù)的百分比,發(fā)生了一些有趣的事情:
- 標(biāo)準(zhǔn)版中位數(shù):RAM 是數(shù)據(jù)大小的 23%
- 企業(yè)版:RAM 是數(shù)據(jù)大小的 17%
- 開(kāi)發(fā)者版:11%(來(lái)吧,伙計(jì),讓他們獲得一些內(nèi)存!)
較舊的 SQL Server 內(nèi)存是否更少?
你們都在挨餓恐龍:
- SQL Server 2008 和 2008R2 中位 RAM 是數(shù)據(jù)庫(kù)大小的 15%
- SQL Server 2012:18%
- SQL Server 2014:19%
- SQL Server 2016:22%
- SQL Server 2017:24%
這可能是由于幾個(gè)因素造成的,比如不關(guān)心舊服務(wù)器的性能,或者處理內(nèi)存容量低得多的舊服務(wù)器。
從這往哪兒走
我接下來(lái)的想法是:
- 哪些服務(wù)器更有可能遇到 PAGEIOLATCH 等待?
- 哪些服務(wù)器在查詢工作區(qū)內(nèi)存不足時(shí)更有可能遇到 RESOURCE_SEMAPHORE 中毒等待?
- 我可以構(gòu)建一個(gè)基于數(shù)據(jù)大小預(yù)測(cè)用戶幸福感的大小調(diào)整工具嗎?(意思是,如果你將 3TB 的數(shù)據(jù)放在 64GB RAM 的虛擬機(jī)上,等待統(tǒng)計(jì)數(shù)據(jù)會(huì)有多糟糕?)
- 那么,我們可以給客戶同樣的建議嗎?例如,向他們展示他們?cè)跀?shù)據(jù)大小、內(nèi)存和幸福度方面的排名?